﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using RESTVeterinariaServices.Dominio;
using RESTVeterinariaServices.Persistencia;
using System.Data.SqlClient;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Net;

namespace RESTVeterinariaServices
{
    public class VeterinarioService : IVeterinarioService
    {
        private VeterinarioDAO dao = new VeterinarioDAO();

        public Veterinario CrearVeterinario(Veterinario VeterinarioACrear)
        {
            int existe = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM Veterinario WHERE numCVP= @numCVP";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@numCVP", VeterinarioACrear.numCVP));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El numCVP del Veterinario ya existe, Ingresar uno nuevo",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            return dao.Crear(VeterinarioACrear);
        }

        public Veterinario ObtenerVeterinario(string IdVeterinario)
        {
            return dao.obtener(IdVeterinario);
        }

        public List<Veterinario> ListarTodos()
        {
            return dao.ListarTodos();
        }

        public Veterinario ModificarVeterinario(Veterinario VeterinarioAModificar)
        {
            //Validar el nombre del Veterinario que no exista al momento de modificar
            int existe = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM dbo.Veterinario WHERE txtVeterinarioNombre=@txtVeterinarioNombre AND ";
                query += "txtVeterinarioApellidoP=@txtVeterinarioApellidoP AND txtVeterinarioApellidoM=@txtVeterinarioApellidoM "; 
                query += "AND IdVeterinario<>@IdVeterinario";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@txtVeterinarioApellidoP", VeterinarioAModificar.txtVeterinarioApellidoP));
                    valida.Parameters.Add(new SqlParameter("@txtVeterinarioApellidoM", VeterinarioAModificar.txtVeterinarioApellidoM));
                    valida.Parameters.Add(new SqlParameter("@txtVeterinarioNombre", VeterinarioAModificar.txtVeterinarioNombre));
                    valida.Parameters.Add(new SqlParameter("@IdVeterinario", VeterinarioAModificar.IdVeterinario));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El nombre del Veterinario ya existe, por favor ingresar uno distinto",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            //valiacion del nuevo de CVP
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM Veterinario WHERE numCVP= @numCVP ";
                query += "AND IdVeterinario<>@IdVeterinario";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@numCVP", VeterinarioAModificar.numCVP));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El numCVP del Veterinario ya existe, Ingresar uno nuevo",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            return dao.Modificar(VeterinarioAModificar);
        }

        public void EliminarVeterinario(string IdVeterinario)
        {

        }
    }
}
